package com.example.test.advice.第五章_数组和集合.建议64_多种最值算法适时选择;

import java.util.Arrays;
import java.util.List;
import java.util.TreeSet;

public class Client {

    public static void main(String[] args) {
        int[] array = new int[]{1,23,4,5,90,90,23,24,19};
        Integer[] array2 = new Integer[]{1,23,4,5,90,90,23,24,19};
        System.out.println("max:"+max(array));
        System.out.println("max2:"+max2(array));
        System.out.println("max3:"+max3(array));
        System.out.println("second:"+getSecond(array2));
    }


    /**
     * 常规方法
     * @param data
     * @return
     */
    private static int max(int[] data){
        int max = data[0];
        for(int i:data){
            max = max > i ? max : i;
        }
        return max;
    }

    /**
     * 先排序，后取值
     * @param data
     * @return
     */
    private static int max2(int[] data){
        //先排序
        int[] temp = data.clone();
        Arrays.sort(temp);//使用data.clone而不是data是为了防止污染原来的数组
        //然后取值
        return temp[temp.length-1];
    }

    private static int max3(int[] data){

        return Arrays.stream(data).max().getAsInt();
    }

    private static int getSecond(Integer[] data){
        //转换为列表
        List<Integer> dataList = Arrays.asList(data);
        //转换为treeSet ，剔除重复元素并升序排列
        TreeSet<Integer> ts =new TreeSet<>(dataList);
        return ts.lower(ts.last());
    }

}
